//package com.csx.base.design.behavior.chainOfResponsibility.example.exampleA.service;
//
//import com.alibaba.fastjson.JSON;
//import com.csx.base.design.behavior.chainOfResponsibility.example.exampleA.config.ProductCheckHandlerConfig;
//import com.csx.base.design.behavior.chainOfResponsibility.example.exampleA.handler.AbstractCheckHandler;
//import com.csx.base.design.behavior.chainOfResponsibility.example.exampleA.model.vo.ProductVO;
//import com.csx.base.design.behavior.chainOfResponsibility.example.exampleA.model.vo.Result;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.util.Map;
//import java.util.Objects;
//
///**
// * @author cuisongxu
// * @date 2022/12/29 23:10
// */
//@Component
//public class ProductService {
//
//    /**
//     * 使用Spring注入，所有继承了AbstractCheckHandler抽象类的Spring Bean都会注入进来
//     * Map的key对应Bean的name，Value是name对相应的bEAN
//     */
//    @Resource
//    public Map<String, AbstractCheckHandler> handlerMap;
//
//    /**
//     * 创建商品
//     * @param param
//     * @return
//     */
//    public Result createProduct(ProductVO param) {
//
//        // 参数校验，使用责任链模式
//
//    }
//
//    /**
//     * 参数校验: 责任链模式
//     * @param param
//     * @return
//     */
//    private Result paramCheckChain(ProductVO param) {
//
//        // 获取处理器配置,通常配置使用统一的配置中心存储,支持动态变更
//
//    }
//
//    /**
//     * 获取处理器配置: 通常配置使用统一配置中心存储，支持动态变更
//     * @return
//     */
//    private ProductCheckHandlerConfig getHandlerConfigFile() {
//
//        //配置中心存储的配置
//        String configJson = "{\"handler\":\"nullValueCheckHandler\",\"down\":false,\"next\":{\"handler\":\"priceCheckHandler\",\"next\":{\"handler\":\"stockCheckHandler\",\"next\":null}}}";
//        // 转换成Config对象
//        ProductCheckHandlerConfig handlerConfig = JSON.parseObject(configJson, ProductCheckHandlerConfig.class);
//        return handlerConfig;
//    }
//
//    /**
//     * 获取处理器
//     * @param config
//     * @return
//     */
//    private AbstractCheckHandler getHandler(ProductCheckHandlerConfig config) {
//
//        // 配置检查,没有配置处理器链路，则不执行校验逻辑
//        if (Objects.isNull(config)) {
//            return null;
//        }
//        return null;
//    }
//}
